Computer systems and related technology are ubiquitous and affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live, work, and play. Computer systems and applications now commonly perform a host of tasks such as word processing, scheduling, accounting, etc., that, prior to the advent of the computer system, were performed manually. Computer systems and applications are also used in myriad ways in recreation and entertainment such as music, video, and gaming. Computer systems and applications are used for such diverse applications as the Global Positioning System (GPS), determining the correct fuel-to-air mixture for an automobile's engine, and for determining and controlling the efficiency of a home heating system.
Computer systems have also been coupled to other computer systems and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. Accordingly, the performance of many computing tasks are distributed across a number of different computer systems and/or a number of different computing environments.
In development of computer systems and applications, testing is frequently necessary to determine if a computer system or application operates as designed or intended. Such testing may be facilitated by configuring, provisioning and operating virtual machines. A virtual machine may be a computer system or application which is implemented upon another computer system for purposes of running the target machine (i.e., the virtual machine) for testing, development, or other purposes. It may also be useful to provision a virtual machine upon a host machine so that a particular computer system or application may be run or operated without the necessity of a dedicated machine to host the target system or application.
Configuring or provisioning a virtual machine may often be difficult and time-consuming. The process of creating and customizing virtual machines often still involves a large number of manual steps. Some of these steps may be complicated and/or difficult, even for seasoned computer professionals. For one-time or occasional users, overcoming these difficulties might be tolerable. But for users who need to create, provision, or customize one or more virtual machines with some frequency (e.g., every day or multiple times per day), on the other hand, these difficulties may become overwhelming. Even when there is already a virtual machine description file a user might reuse, a user may still need to create and provision a new virtual machine, bring it up, rename it and join its domain manually.
If a user desires to customize a virtual machine to his/her own needs (e.g. configure a single machine sharepoint farm), he or she may have to manually install and configure each item of software on the virtual machine one by one. From a point when a user has a clean virtual machine to the point the virtual machine is fully configured to user's needs, there might be more than 20 steps involved, each one possibly complicated and/or difficult. If a task required a user to do this every day, multiple times a day, or with some regularity, with even slight variations for each configured and provisioned virtual machine, this can be overwhelming.